Fix: PG::SyntaxError (MAYBE-MARKETING-3C) #254
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
The error occurs in the Stock model's search scope where the PostgreSQL tsquery syntax is being generated incorrectly. The original code was attempting to sanitize search terms by removing special characters and adding
:*
for prefix matching, but it wasn't properly handling empty terms that could result from the sanitization process.The original implementation:
could produce invalid tsquery strings like "ANF:* & Abercrombie:* & :* & Fitch:* & Co.:" where empty terms resulted in standalone ":" expressions, which is invalid PostgreSQL tsquery syntax.
The fix modifies the query construction process into distinct steps:
query.split
)gsub(/[()&|!:*]/, '')
).reject(&:blank?)
):*
suffix to each remaining term for prefix matchingThis ensures that we never generate invalid tsquery syntax with empty terms, while maintaining the original functionality of prefix matching and term combination.
The search will now properly handle cases where:
The change preserves the original intent of the search functionality while making it more robust against edge cases that could cause PostgreSQL syntax errors.
Error Details
Summary:
Stacktrace:
Tip
You can make revisions or ask questions of Revise.dev by using
/revise
in any comment or review!/revise Add a comment above the method to explain why we're making this change.
/revise Why did you choose to make this change specifically?
Important
If something doesn’t look right, click to retry this interaction.
Quick links: View in Sentry • View in Revise